layout.tsx 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import DownloadSection from "@/app/[locale]/(TabBar)/[[...share]]/_home/DownloadSection";
  2. import {
  3. NoticePlaceHolder,
  4. PrizePlaceHolder,
  5. SwiperPlaceHolder,
  6. } from "@/app/[locale]/(TabBar)/[[...share]]/Placeholder";
  7. import Header from "@/components/Header";
  8. import { getTranslations } from "next-intl/server";
  9. import { FC, PropsWithChildren, ReactNode, Suspense } from "react";
  10. export const generateMetadata = async () => {
  11. const t = await getTranslations("titles");
  12. return {
  13. title: t("home"),
  14. };
  15. };
  16. type Props = {
  17. clientWidget: ReactNode;
  18. swiperWidget: ReactNode;
  19. popupWidget: ReactNode;
  20. cardWidget: ReactNode;
  21. noticeWidget: ReactNode;
  22. searchWidget: ReactNode;
  23. prizeWidget: ReactNode;
  24. actionWidget: ReactNode;
  25. mediaWidget: ReactNode;
  26. sportSwiperWidget: ReactNode;
  27. categoryWidget: ReactNode;
  28. navigateWidget: ReactNode;
  29. group: any;
  30. };
  31. const Placeholder = () => {
  32. return <div className={"flex justify-center"}>{/*<Loading/>*/}</div>;
  33. };
  34. const Layout: FC<PropsWithChildren<Props>> = async (props) => {
  35. const {
  36. children,
  37. swiperWidget,
  38. popupWidget,
  39. cardWidget,
  40. noticeWidget,
  41. searchWidget,
  42. prizeWidget,
  43. actionWidget,
  44. mediaWidget,
  45. sportSwiperWidget,
  46. clientWidget,
  47. navigateWidget,
  48. categoryWidget,
  49. } = props;
  50. return (
  51. <>
  52. <Suspense>{clientWidget}</Suspense>
  53. <Suspense>
  54. <DownloadSection />
  55. </Suspense>
  56. <Suspense>
  57. <Header></Header>
  58. </Suspense>
  59. <main id="maincontainer" className={"main-header"}>
  60. {/*弹窗*/}
  61. <Suspense fallback={<Placeholder />}>{popupWidget}</Suspense>
  62. <div className={"px-spacing-x py-spacing-y"}>
  63. {/* swiper */}
  64. <Suspense fallback={<SwiperPlaceHolder />}>{swiperWidget}</Suspense>
  65. </div>
  66. {/* swiper下的活动 */}
  67. <div className="px-spacing-x">
  68. <Suspense>{cardWidget}</Suspense>
  69. </div>
  70. {/* 跑马灯 */}
  71. <div className="px-spacing-x">
  72. <Suspense fallback={<NoticePlaceHolder />}>{noticeWidget}</Suspense>
  73. </div>
  74. <div className="px-spacing-x">
  75. <Suspense fallback={<Placeholder />}>{navigateWidget}</Suspense>
  76. </div>
  77. {/* <Box>
  78. {categoryWidget}
  79. </Box> */}
  80. {/*体育轮播*/}
  81. {/* <Box> {sportSwiperWidget}</Box> */}
  82. {/* 搜索下面的大奖展示 */}
  83. {/*<Suspense fallback={<PrizePlaceHolder />}>{prizeWidget}</Suspense>*/}
  84. {/* 搜索组件 */}
  85. {/* <Box none className="mb-[.2rem] px-[.12rem]">
  86. {searchWidget}
  87. </Box> */}
  88. {/* tabs 和 游戏列表 */}
  89. <Suspense fallback={<PrizePlaceHolder />}>{children}</Suspense>
  90. {/* 大奖 */}
  91. <Suspense fallback={<PrizePlaceHolder />}>{prizeWidget}</Suspense>
  92. {/*媒体*/}
  93. {/* <div className="mt-[.2rem]">*/}
  94. {/*<Suspense fallback={<Placeholder />}>{mediaWidget}</Suspense>*/}
  95. {/*</div>*/}
  96. {/* {React.Children.map(children,(child:any)=>{
  97. console.log(child)
  98. return React.cloneElement(child,{sass:'asdasadsadsadasds'} )
  99. })} */}
  100. {/*底部信息*/}
  101. <Suspense fallback={<Placeholder />}>{actionWidget}</Suspense>
  102. </main>
  103. </>
  104. );
  105. };
  106. export default Layout;